package com.zy.controller;

import com.zy.services.FileService;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;


/**
 * @author: 11473
 * @time: 2019/9/19 16:45
 */
@Controller
public class FileController {

    @Autowired
    FileService fileService;

    /**
     * 文件上传
     * @param fileUpload
     * @return
     */
    @RequestMapping("/fileUpload")
    public String fileUpload(@RequestParam("fileUpload")MultipartFile fileUpload){

        // springmvc将form表单中的file控件的流文件内容映射到 MultipartFile 形参变量fileUpload上
        System.out.println("文件名：" + fileUpload.getOriginalFilename());
        System.out.println("文件大小:" + fileUpload.getSize());
        System.out.println("文件类型:" + fileUpload.getContentType());
        System.out.println("上传的标签名:" + fileUpload.getName());

        // 将文件对象file_userimg 中的文件流上传到服务器
        // 获取文件的服务器的保存路径
        System.out.println("文件的服务器的保存路径:" + System.getProperty("server.basePath"));
        // 当前项目在web服务器上的部署的绝对路径,也可以自己定义一个路径
        String serverBasePath = System.getProperty("server.basePath");

        // 设置服务器的保存文件的路径名
        String serverFileSavePath = "uploadfiles/img/";
        // 完整的服务器保存路径为 serverBasePath+ serverFileSavePath
        String serverSavePath = serverBasePath + serverFileSavePath;
        // 验证服务器是否已经创建了该目录
        File fileSave = new File(serverSavePath);
        // 判断保存路径文件对象是否存在
        if (!fileSave.exists()) {
            // 创建该目录
            fileSave.mkdirs();
        }

        // 文件需要在服务器上进行重命名，然后进行保存
        // 命名规则： 前缀+系统时间毫秒数+文件后缀
        // 获取文件类型   ***/格式
        String fileContentType = fileUpload.getContentType();
        // 获取文件后缀
        String fileType = fileContentType.substring(fileContentType.indexOf("/") + 1);
        // 文件名前缀
        String fileNamePrefix = "userimg";
        // 生成新的文件名
        String fileNewName = fileNamePrefix + System.currentTimeMillis() + "." + fileType;
        System.out.println("新文件名：" + fileNewName);
        // 将文件流写出到服务器保存路径
        try {
            fileUpload.transferTo(new File(serverSavePath + fileNewName));
        } catch (IOException e) {
            System.out.println("文件上传异常：" + e.getMessage());
            e.printStackTrace();
        }
        // 需要保存的文件的访问路径
        String fileRelativePath = serverFileSavePath + fileNewName;
        System.out.println("文件的访问路径：" + fileRelativePath);
        /*
        // 将文件对象的访问路径映射给实体类对象的成员属性上

        // 使用反射，将设置属性的方法具有通用性 (要使用在pom中清除commons-beanutils注解)
        // 提取需要保存的属性名
        String propertyName = fileUpload.getName().replace("file_", "");
        try {
            BeanUtils.setProperty(userInfoBean, propertyName, fileRelativePath);
        } catch (Exception e) {
            System.out.println("文件上传异常：" + e.getMessage());
            e.printStackTrace();
        }
        // 调用Service层进行用户信息数据保存和修改操作

        */
        // 根据操作结果进行视图转发处理
        return "t";

    }
}
